package com.example;

import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.CircleCaptcha;
import cn.hutool.captcha.LineCaptcha;
import cn.hutool.captcha.ShearCaptcha;
import cn.hutool.captcha.generator.MathGenerator;
import cn.hutool.captcha.generator.RandomGenerator;
import cn.hutool.core.lang.Console;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

// 图形验证码测试
@SpringBootTest
public class CaptchaTest {

    // 当用户进入到登录页面时，就需要发送一个获取验证码的请求
    // 将图形验证码的内容存储在 redis 中，然后将图形验证码写入到 response 中
    // 用户点击图形验证码或者刷新页面时，需要重新发送一个获取验证码的请求
    // 登录时，将前端传来的验证码和 redis 中的验证码进行比对，如果正确，则登录成功，否则登录失败

    // LineCaptcha 线段干扰的验证码
    @Test
    public void captcha() {
        // 定义图形验证码的长和宽
        LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(200, 100);

        // 图形验证码写出，可以写出到文件，也可以写出到流
        lineCaptcha.write("~/图片/line.png");
        // 输出code
        Console.log(lineCaptcha.getCode());
        // 验证图形验证码的有效性，返回boolean值
        lineCaptcha.verify("J2Jr4");

        // 重新生成验证码
        lineCaptcha.createCode();
        lineCaptcha.write("~/图片/line.png");
        // 新的验证码
        Console.log(lineCaptcha.getCode());
        // 验证图形验证码的有效性，返回boolean值
        boolean verify = lineCaptcha.verify("1234");
        Console.log(verify);
    }

    // CircleCaptcha 圆圈干扰验证码
    @Test
    public void captcha2() {
        // 定义图形验证码的长、宽、验证码字符数、干扰元素个数
        CircleCaptcha captcha = CaptchaUtil.createCircleCaptcha(200, 100, 4, 20);
        // CircleCaptcha captcha = new CircleCaptcha(200, 100, 4, 20);
        // 图形验证码写出，可以写出到文件，也可以写出到流
        captcha.write("~/图片/circle.png");
        // 验证图形验证码的有效性，返回boolean值
        captcha.verify("1234");
    }

    // ShearCaptcha 扭曲干扰验证码
    @Test
    public void captcha3() {
        // 定义图形验证码的长、宽、验证码字符数、干扰线宽度
        ShearCaptcha captcha = CaptchaUtil.createShearCaptcha(200, 100, 4, 4);
        // ShearCaptcha captcha = new ShearCaptcha(200, 100, 4, 4);
        // 图形验证码写出，可以写出到文件，也可以写出到流
        captcha.write("~/图片/shear.png");
        // 验证图形验证码的有效性，返回boolean值
        captcha.verify("1234");
    }

    // 自定义验证码字符，验证码为纯数字
    @Test
    public void captcha4() {
        // 自定义纯数字的验证码（随机4位数字，可重复）
        RandomGenerator randomGenerator = new RandomGenerator("0123456789", 4);
        LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(200, 100);
        lineCaptcha.setGenerator(randomGenerator);
        lineCaptcha.write("~/图片/RandomGenerator.png");
        lineCaptcha.verify("1234");
        // 重新生成code
        lineCaptcha.createCode();
        Console.log(lineCaptcha.getCode());
    }

    // 自定义验证码字符, 验证码为四则运算方式
    @Test
    public void captcha5() {
        ShearCaptcha captcha = CaptchaUtil.createShearCaptcha(200, 45, 4, 4);
        // 自定义验证码内容为四则运算方式
        captcha.setGenerator(new MathGenerator());
        captcha.write("~/图片/MathGenerator.png");
        captcha.verify("87");
        // 重新生成code
        captcha.createCode();
    }
}
